home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD Exchange
/
CD Exchange - Volume 1.iso
/
education
/
gravity-well
/
gw-vectors.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-09-24
|
2KB
|
102 lines
/*
GW-Vectors.c
Vector arithmetic for Gravity-Well
Gary Teachout
Copyright July 1989
lc -x GW-Vectors To compile with Lattice 5.0
*/
#include "GW-Include.h"
void rotatedv( v , pv , s , c )
struct dv *v , *pv ;
double *s , *c ;
{
struct dv t1 , t2 ;
scaledv( v , c , &t1 ) ;
scaledv( pv , s , &t2 ) ;
adddv( &t1 , &t2 , v ) ;
}
void rotatedvpair10( x , y ) /* rotate vector pair 10 degrees */
struct dv *x , *y ;
{
static double srotate = 0.1736481776669303311 ,/* the sine and cosine */
crotate = 0.9848077530122081313 ,/* of 10 degrees */
m1 = -1.0 ;
struct dv t1 ;
scaledv( x , &m1 , &t1 ) ;
rotatedv( x , y , &srotate , &crotate ) ;
rotatedv( y , &t1 , &srotate , &crotate ) ;
}
void adddv( a , b , out )
struct dv *a , *b , *out ;
{
out->x = a->x + b->x ;
out->y = a->y + b->y ;
out->z = a->z + b->z ;
}
void subdv( a , b , out )
struct dv *a , *b , *out ;
{
out->x = a->x - b->x ;
out->y = a->y - b->y ;
out->z = a->z - b->z ;
}
void scaledv( a , b , out )
struct dv *a , *out ;
double *b ;
{
out->x = a->x * *b ;
out->y = a->y * *b ;
out->z = a->z * *b ;
}
void dotdv( a , b , out )
struct dv *a , *b ;
double *out ;
{
*out = a->x * b->x + a->y * b->y + a->z * b->z ;
}
/**** Gravity-Well does not use cross products
void crossdv( a , b , out ) ** output must not go to input **
struct dv *a , *b , *out ;
{
out->x = a->y * b->z - a->z * b->y ;
out->y = a->z * b->x - a->x * b->z ;
out->z = a->x * b->y - a->y * b->x ;
}
****/
void magdv( a , out )
struct dv *a ;
double *out ;
{
*out = sqrt( a->x * a->x + a->y * a->y + a->z * a->z ) ;
}
void basis( a , b , out ) /* output must not go to input */
struct dv *a , *out ;
struct obv *b ;
{
dotdv( a , &b->i , &out->x ) ;
dotdv( a , &b->j , &out->y ) ;
dotdv( a , &b->k , &out->z ) ;
}